package com.br.negocio.web.backbean;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.br.negocio.controller.ControllerCarro;
import com.br.negocio.vo.CarroVO;
import com.br.negocio.vo.ModeloVO;
import com.br.negocio.web.formbean.CarroFormBean;

@Controller("carroBackBean")
@Scope("session")
public class CarroBackBean{

	private static final long serialVersionUID = 1L;
	
	@Resource
	private ControllerCarro controllerCarro;
	
	private CarroFormBean carroFormBean;

	public CarroBackBean() {
		super();
		this.carroFormBean = new CarroFormBean();
	}

	public CarroFormBean getCarroFormBean() {
		return this.carroFormBean;
	}

	public void setCarroFormBean(CarroFormBean carroFormBean) {
		this.carroFormBean = carroFormBean;
	}
	
	// M�TODOS

	public void obterListaCarro() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.carroFormBean.setListaCarro(this.controllerCarro.obterListaCarro());
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao obter a lista de carro: " + e.getMessage()));
		}
	}
	
	public void manterCarro() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.carroFormBean.getCarroManter().setModeloVO(this.getCarroFormBean().getModeloManter());
			this.controllerCarro.atualizarCarro(this.carroFormBean.getCarroManter());
			this.carroFormBean.setIsDisabled(true);
			context.addMessage(null, new FacesMessage("Sucesso: Inser��o realizada com sucesso!"));
		} catch (Exception e) {
			context.addMessage(null , new FacesMessage("Erro ao manter o carro: " + e.getMessage()));
		}

	}
	
	public void excluirCarro() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			if (this.getCarroFormBean().getCarroManter().getCodigo() != 0) {
				this.controllerCarro.removerCarro(this.carroFormBean.getCarroManter());
				if (!this.carroFormBean.getListaCarro().isEmpty()) {
					this.carroFormBean.setListaCarro(this.controllerCarro.obterListaCarro());
				}
				this.carroFormBean.setCarroManter(new CarroVO());
				context.addMessage(null, new FacesMessage("Sucesso: Carro exclu�do com sucesso!"));
			}
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao excluir o carro: " + e.getMessage()));
		}
	}
	
	// LISTENERS
	
	public void listenerIrInserirCarro(ActionEvent evento) {
		this.carroFormBean.setModeloManter(new ModeloVO());
		this.carroFormBean.setCarroManter(new CarroVO());
		this.carroFormBean.setIsDisabled(false);
		this.carroFormBean.setHead("Cadastrar Carro");
	}
	
	public void listenerIrExcluirCarro(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoCarroExcluir");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			CarroVO carroVO = new CarroVO();
			carroVO.setCodigo(codigo);
			this.carroFormBean.setCarroManter(this.controllerCarro.obterCarro(carroVO));
			this.carroFormBean.setModeloManter(this.carroFormBean.getCarroManter().getModeloVO());
		}
		this.carroFormBean.setHead("Excluir Carro");
		this.carroFormBean.setIsDisabled(true);
	}
	
	public void listenerIrEditarCarro(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoCarroEditar");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			CarroVO carroVO = new CarroVO();
			carroVO.setCodigo(codigo);
			this.carroFormBean.setCarroManter(this.controllerCarro.obterCarro(carroVO));
			this.carroFormBean.setModeloManter(this.carroFormBean.getCarroManter().getModeloVO());
		}
		this.carroFormBean.setHead("Editar Carro");
		this.carroFormBean.setIsDisabled(false);
	}

}